<?php


class Lote_model extends CI_Model
{
    private $id;
    private $evento;
    private $nome;
    private $preco;
    private $total_ingressos;


    public function  __construct($id = null, $instancia_evento = FALSE)
    {
	parent::__construct();
	
	if ($id != null)
	{
	    $query = $this->db->get_where('lote', array('id_lote' => $id));

	    if ($query->num_rows() == 1)
	    {
		$tmp = $query->row();

		$this->set_id((int)$tmp->id_lote);
		$this->set_nome($tmp->nome);
		$this->set_preco($tmp->preco);
		$this->set_total_ingressos($tmp->quantidade_ingressos);

		if ($instancia_evento == TRUE)
		{
		    require_once APPPATH . 'models/evento_model.php';
		    $this->set_evento(new Evento_model($tmp->id_evento, FALSE));
		}
	    }
	    else
	    {
		exit('Erro. Não foi possível criar a classe Lote_model');
	    }
	}
    }

    public function create()
    {
	$this->db->trans_start();
	
	$dados = array( 'nome'			=> $this->get_nome(),
			'preco'			=> $this->get_preco(),
			'quantidade_ingressos'	=> $this->get_total_ingressos(),
			'id_evento'		=> $this->get_evento()->get_id()
		);

	$this->db->insert('lote', $dados);


	// inicia a criacao de ingressos
	require_once APPPATH . 'models/ingresso_model.php';


	$tmp = new Ingresso_model();
	$tmp->set_lote(new Lote_model($this->db->insert_id()));

	$total = $this->get_total_ingressos();
	for($i = 1; $i <= $total; $i++)
	{
	    $tmp->set_nro($i);
	    $tmp->create();
	}

	$this->db->trans_complete();

	if ($this->db->trans_status() === FALSE)
	{
	    return FALSE;
	}

	return TRUE;
    }

    public function vende_ingressos($quantidade, Ordem_model $ordem)
    {
	$this->db->where("id_lote = {$this->get_id()} AND id_ordem IS NULL");
	$query = $this->db->get('ingresso');

	require_once APPPATH . 'models/ingresso_model.php';
	foreach($query->result() as $k => $row)
	{
	    $ingresso = new Ingresso_model($row->nro_ingresso, $row->id_lote);
	    $ingresso->set_ordem($ordem);
	    $ingresso->vender();
	    
	    if ($k == $quantidade -1)
	    {
		break;
	    }
	}
    }

    public function quantos_ingressos_vendidos()
    {
	$this->db->where("id_lote = {$this->get_id()} AND id_ordem IS NOT NULL");
	$this->db->get('ingresso');

	return $this->db->count_all_results();
    }

    public function quantos_ingressos_disponiveis()
    {
	return $this->get_total_ingressos() - $this->quantos_ingressos_vendidos();
    }

    public function esta_esgotado()
    {
	return $this->get_total_ingressos() == $this->quantos_ingressos_vendidos();
    }

    public function get_id() {
	return $this->id;
    }

    public function set_id($id) {
	$this->id = $id;
    }

    public function get_nome() {
	return $this->nome;
    }

    public function set_nome($n) {
	$this->nome = $n;
    }

    public function get_preco() {
	return $this->preco;
    }

    public function set_preco($p) {
	$this->preco = $p;
    }

    public function get_total_ingressos() {
	return $this->total_ingressos;
    }

    public function set_total_ingressos($t) {
	$this->total_ingressos = $t;
    }

    public function get_evento() {
	return $this->evento;
    }

    public function set_evento(Evento_model $e) {
	$this->evento = $e;
    }
}